package com.ddwl.common.feign.api;

import com.ddwl.schema.bo.base.PageBo;
import com.ddwl.schema.bo.order.DistOrderBo;
import com.ddwl.schema.bo.user.*;
import com.ddwl.schema.vo.base.PageVo;
import com.ddwl.schema.vo.base.RestVo;
import com.ddwl.schema.vo.dist.DistrConfigVo;
import com.ddwl.schema.vo.dist.UserInviteCountVo;
import com.ddwl.schema.vo.order.StatisticsUserVo;
import com.ddwl.schema.vo.user.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 类UserApi.java的实现描述：用户api
 *
 * @author zach
 * @Date :2020-06-02 13:33.
 */
@FeignClient(name = "ddwl-user" ,path = "/user")
public interface UserApi {




    /**
     * 查询用户地址详情
     * @param id
     * @return
     */
    @GetMapping("/address/detail")
    RestVo<UserAddrVo> getUserAdderDetail(@RequestParam("id") String id);

    /**
     * 获取用户信息
     * @param userId
     * @return
     */
    @GetMapping("/profit/{userId}/profile")
    RestVo<UserVo> getProfile(@PathVariable("userId") String userId);

    /**
     *根据电话获取用户数据
     * @param phone
     * @return
     */
    @GetMapping("/profit/{phone}/fenxiao")
    RestVo<UserVo> getProfileByPhone(@PathVariable("phone") String phone);
    /**
     * 根据卡号用户id证查询
     *  @param code
     * @param userId
     * @return
     */
    @GetMapping("/identity/getIdCardByCodeAndUserId/{code}/{userId}")
    RestVo<List<IdentityCardVo>> getIdCardByCodeAndUserId(@PathVariable("code") String code,@PathVariable("userId") String userId);

    /**
     * 根据卡号查询身份证
     * @param code
     * @return
     */
    @GetMapping("/identity/getIdCardByCode/{code}")
    RestVo<List<IdentityCardVo>> getIdCardByCode(@PathVariable("code") String code);

    /**
     * 根据用户id查询身份证
     * @param userId
     * @return
     */
    @GetMapping("/identity/getIdCardByUserId/{userId}")
    RestVo<IdentityCardVo> getIdCardByUserId(@PathVariable("userId") String userId);

    /**
     * 根据电话号查询身份证
     * @param tel
     * @return
     */
    @GetMapping("/identity/getIdCardByTel/{tel}")
    RestVo<IdentityCardVo> getIdCardByTel(@PathVariable("tel") String tel);

    /**
     * 获取分销系统配置
     * @return
     */
    @GetMapping("/profit/config/{type}")
    RestVo<DistrConfigVo> getDistConfig(@PathVariable("type") Integer type);

    /**
     * 店铺生成分销会员信息
     * @param bo
     * @return
     */
    @PostMapping("/profile/create")
    RestVo createProfile(@Valid @RequestBody FenxiaoRegisterBo bo);

    /**
     * 获取用户等级配置
     * @return
     */
    @PostMapping("/userLevel/queryUserLevel")
    RestVo<List<UserLevelVo>> queryUserLevel(@RequestBody QueryUserLevelBo bo);

    /**
     * 查询区域合伙人的用户信息
     * @param region
     * @return
     */
    @GetMapping("/profit/{region}/user")
    RestVo<UserVo> getRegionUser(@PathVariable("region") String region);

    /**
     * 根据区域id查询该区域的总代理
     * @param regionId
     * @return
     */
    @GetMapping("/profit/getTopUserByRegionId")
    RestVo<UserVo> getTopUserByRegionId(@RequestParam("regionId") String regionId);

    /**
     * 查询用户代理的区域
     * @param userId
     * @return
     */
    @GetMapping("/profit/{userId}/agentRegion")
    RestVo<List<String>> getUserRegion(@PathVariable("userId") String userId);

    /**
     * 查询审批通过的代理用户
     * @return
     */
    @GetMapping("/profit/apply/successful")
    RestVo<List<ProfitApplyVo>> successfulApply();

    /**
     * 根据用户id查询用户auth信息
     * @return
     */
    @GetMapping("/getUserAuth/{userId}")
    RestVo<UserAuthVo> getUserAuth(@PathVariable("userId") String userId, @RequestParam("product") String product);

    /**
     * 根据用户openId查询用户认证信息
     * @param bo
     * @return
     */
    @PostMapping("/getUserAuthByOpenId")
    RestVo<UserAuthVo> getUserAuthByOpenId(@RequestBody RegisterBo bo);

    /**
     * 检查该微信用户是否已经注册过分销用户
     * @param bo
     * @return
     */
    @PostMapping(value = "/checkRegister", consumes = "application/json; charset=utf-8", produces = "application/json; charset=utf-8")
    RestVo<LoginVo> checkRegister(@RequestBody RegisterBo bo);


    /**
     * APP查询下级分销员的Id
     * @param userId
     */
    @PostMapping("/distUser/userLowerIds")
    RestVo<List<String>> queryUserLowerIds(@RequestParam("userId") String userId);

    /**
     * APP用户当天邀请的用户统计信息
     * @param userId
     */
    @PostMapping("/distUser/userInviteCount")
    RestVo<UserInviteCountVo> getInviteCountVo(@RequestParam("userId") String userId);

    /**
     * 修改用户分销统计信息
     * @param distOrderBos
     */
    @PostMapping("/distUser/userDistStatistical")
    void updateUserDistStatistical(@RequestBody List<DistOrderBo> distOrderBos);

    /**

     * 查询用户信息
     * @param pageBo
     */
    @PostMapping("/page")
    RestVo<PageVo<UserVo>> queryUser(@Valid @RequestBody PageBo<UserSearchBo> pageBo);

    /**
     * 针对砍价活动的新用户 （3天内第一次登录）
     */
    @GetMapping("/firstLogin")
    RestVo<Boolean> firstLogin(@RequestParam String userId);
    /**
     * 用户分页列表
     */
    @PostMapping("/page")
    RestVo<PageVo<UserVo>> getUserPage(@RequestBody PageBo<UserSearchBo> pageBo);

    @PostMapping("/getUserByIds")
    @ApiOperation("根据用户ids获取用户列表")
    RestVo<List<UserVo>> getUserByIds(@RequestParam Collection<String> userIds);

    @ApiOperation("根据用户等级编码获取用户登记信息")
    @GetMapping("/userLevel/getByUserLevelCode")
    RestVo<UserLevelVo> getByUserLevelCode(@RequestParam Integer code);

    @PostMapping("/profit/apply/profitApplyList")
    @ApiOperation("获取身份证审批列表不分页")
    RestVo<Integer> queryProfitApplyCount(@RequestBody ProfitApplyQueryBo pageBo);

    @PostMapping("/pageUserCount")
    @ApiOperation("分页查询用户数量")
    RestVo<List<StatisticsUserVo>> pageUserCount(@RequestBody UserSearchBo pageBo);

    /**
     * 保存店铺小程序码
     * @param bo
     * @return
     */
    @PostMapping("/saveShopWxaCode")
    RestVo saveShopWxaCode(@RequestBody UserBo bo);

    /**
     * 根据openId获取用户信息
     * @return
     */
    @GetMapping("/getByOpenId/{openId}/{pk}")
    RestVo<UserVo> getByOpenId(@PathVariable("openId") String openId,@PathVariable("pk") String pk);

    /**
     * 获取微信公众号openId
     * @param userId
     * @return
     */
    @GetMapping("/getWechatOpenId")
    @ApiOperation("获取微信公众号openId")
    RestVo<String> getWechatOpenId(@RequestParam String userId);

    /**
     * 获取用户信息
     * @param userId
     * @return
     */
    @GetMapping("/getUserById")
    RestVo<UserVo> getUserById(@RequestParam String userId);

    /**
     * 获取公益基金用户
     * @return
     */
    @GetMapping("/getCharityFundUser")
    RestVo<UserVo> getCharityFundUser();
}
